package com.java.mybatis.service;

import com.java.mybatis.entity.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * (Goods)表服务接口
 *
 * @author makejava
 * @since 2021-01-15 17:10:28
 */
public interface GoodsService {
    /**
     * 查询总数量
     * @return
     * @throws Exception
     */
    int queryNumber()throws Exception;

    int queryCount() throws Exception;

    /**
     * 根据姓名查询总行数
     */
    int queryNumberName(@Param("name") String name)throws Exception;


    /**
     * 分页模糊查询库存管理
     * @return
     */
    List<Goods> querySelPageLike(String name, Integer page, Integer pageSize)throws Exception;

    /**
     * 分页查询库存管理
     */
    List<Goods> querySelPage(Integer page,Integer pageSize)throws Exception;

    /**
     * 模糊查询库存管理
     */
    List<Goods> querySelKcLike(String goodsName)throws Exception;

    /**
     * 模糊查询盘点管理
     */
    List<Goods> querySelInfo(String goodsName)throws Exception;

    /**
     * 分页查询盘点管理
     */
    List<Goods> querySelPageInfo(Integer page,Integer pageSize)throws Exception;


    /**
     * 通过ID查询单条数据
     *
     * @param goodsId 主键
     * @return 实例对象
     */
    Goods queryById(Integer goodsId);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    List<Goods> queryAllByLimit(int offset, int limit);

    /**
     * 新增数据
     *
     * @param goods 实例对象
     * @return 实例对象
     */
    Goods insert(Goods goods);

    /**
     * 修改数据
     *
     * @param goods 实例对象
     * @return 实例对象
     */
    Goods update(Goods goods);

    /**
     * 通过主键删除数据
     *
     * @param goodsId 主键
     * @return 是否成功
     */
    boolean deleteById(Integer goodsId);

    /**
     * 分页查询货物信息为已入库的
     * @param state  货物状态
     * @param page   分页开始
     * @param size   分页结束
     * @return
     */
    List<Goods> queryStateLimit(Integer state,Integer page,Integer size);

    /**
     * 根据货物id修改货物状态
     * @param state
     * @param goodId
     * @return
     */
    int updateState(Integer state,Integer goodId);

    /**
     * 根据货物状态查询总条数
     * @param state
     * @return
     */
    int goodStateCount(Integer state);

    /**
     * 出库
     * @param state
     * @param goodId
     * @return
     */
    int updateStateDelivery(Integer state,Integer goodId);


    /**
     * 查询所有货物以及当前状态的方法
     * @return
     * @throws Exception
     */
    List<Goods> selGoodsAll(Integer page,Integer size)throws Exception;

    /**
     * 查询总行数
     * @return
     * @throws Exception
     */
    Integer selGoodsCount()throws Exception;

    /**
     * 模糊查询
     * @return
     * @throws Exception
     */
    List<Goods> selGoodsLike(String name,Integer page,Integer size)throws Exception;

    /**
     * 查询货物类别
     * @return
     * @throws Exception
     */
    List<Goods> selGoodsTyep() throws Exception;


    /**
     * 添加的方法
     * @param
     * @return
     * @throws Exception
     */
    int insertGoods(String bianhao, String goodsname, String goodsnumber, String username, String goodsweight, String userphoen, String useraddress , Integer orderId, Integer goodsTypeID, Integer locationID, Integer goodsState, Integer goodsCode, Integer putinlocationid)throws Exception;

    /**
     * 查询货物地区下有没有货物未出库做判断
     * @param id
     * @return
     * @throws Exception
     */
    Integer selCount(Integer id)throws Exception;

    /**
     * 查询货物分类下有没有货物未出库做判断
     * @param id
     * @return
     * @throws Exception
     */
    Integer selGoodsTypeCount(@Param("id")Integer id)throws Exception;

    /**
     * 模糊查询显示总行数
     * @param name
     * @return
     * @throws Exception
     */
    Integer selGoodsLikeCount(String name)throws Exception;

    /**
     * 根据出库批号编号查询货物总数量
     * @param outboundNumber  出库批号编号
     * @return
     */
    int selectGoodsNumber(String outboundNumber);

    /**
     * 下拉框查询
     * @param map  需要的参数
     * @return
     */
    List<Goods> queryStateSelect(Map<String,Object> map);

    /**
     * 模糊查询
     * @param map
     * @return
     */
    List<Goods> queryStateLikeGoodsOrders(Map<String,Object> map);

    /**
     * 模糊查询2
     * @param map
     * @return
     */
    List<Goods> queryStateLikeGoodsName(Map<String,Object> map);

    /**
     * 下拉框查询总条数
     * @param map
     * @return
     */
    int queryStateSelectCount(Map<String,Object> map);

    /**
     * 模糊查询总条数
     * @param map
     * @return
     */
    int queryStateLikeGoodsOrdersCount(Map<String,Object> map);

    /**
     * 模糊查询总条数2
     * @param map
     * @return
     */
    int queryStateLikeGoodsNameCount(Map<String,Object> map);

    /**
     * 添加
     * @param goods
     * @return
     */
    int addGoods(Goods goods);

    /**
     * 模糊查询货物地区
     * @param area
     * @return
     * @throws Exception
     */
    List<Goods> selGoodsArea(String area,Integer page,Integer size)throws Exception;


    /**
     * 模糊查询货物地区总行数
     * @param area
     * @return
     * @throws Exception
     */
    int selGoodsAreaCount(String area)throws Exception;

    /**
     * 模糊查询用户姓名
     * @param name
     * @param page
     * @param size
     * @return
     * @throws Exception
     */
    List<Goods> selGoodsUserName(String name,Integer page,Integer size)throws Exception;

    /**
     * 模糊查询用户姓名总行数
     * @param name
     * @return
     * @throws Exception
     */
    int selGoodsNameCount(String name)throws Exception;
    /**
     * 查询货物名称的方法
     * @return Goods对象封装的list集合
     */
    List<Goods> queryGoodsName();
}